package javacode.chapter07.recursion;

/**
 * 汉诺塔(HanoiTower)问题，递归解决
 */
public class HanoiTower {
    public static void main(String[] args) {
        HanoiTowerMethod method = new HanoiTowerMethod();
        method.move(3,'A','B','C');
    }
}

class HanoiTowerMethod {
    //num 表示要移动的个数，a, b, c 分别表示A塔， B塔 C塔
    public void move(int num, char a, char b, char c) {
        if (num == 1) {//若有一个盘子，就直接从A移动到C
            System.out.println(a + "->" + c);
        } else {
            //如果有多个盘子，可以看成两个，最下面的和上面的所有盘
            //1.先移动上面所有的盘到b，借助c
            move(num - 1, a, c, b);
            //2.吧最下面的这个盘，移动到c
            System.out.println(a + "=>" + c);
            //3.在把b塔所有的盘，移动到c，借助a
            move(num - 1, b, a, c);
        }
    }
}